﻿Public Class frmMoniteurs

    Private szSQL As String
    Private rs As ADODB.Recordset
    Dim OLD_CODE As String
    Private m_SortingColumn As ColumnHeader
    Private m_SortingIndex As Integer = 0

    Private Sub frmMoniteurs_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        InitListeMoniteurs(0)
        TC_Details.Visible = False

        If gUserAcces < 9 Then
            BO_ENREGISTRER.Visible = False
        Else
            BO_ENREGISTRER.Visible = True
        End If

    End Sub

    Private Sub InitListeMoniteurs(ByVal ix As Integer)

        Dim nb As Integer = 0

        ' effacer la listview
        LV_MONITEURS.Items.Clear()
        LV_MONITEURS.ListViewItemSorter = Nothing

        ' Lire la table MONITEURS
        szSQL = "CALL spGet_MONITEURS('')"
        GetRecordset(ctDSN_AEM, szSQL, rs)

        ' Load the data.
        Do While Not rs.EOF
            LV_MONITEURS.Items.Add(rs.Fields("cd_mon").Value)
            LV_MONITEURS.Items(nb).SubItems.Add(rs.Fields("nom").Value)
            LV_MONITEURS.Items(nb).SubItems.Add(rs.Fields("planning").Value)
            rs.MoveNext()
            nb = nb + 1
        Loop
        ' Close the recordset AND connection.
        rs.Close()

        LB_NbLignes.Text = CStr(nb) & " lignes"

        ' restaurer l'ancienne ordre de tri de la listview
        If m_SortingIndex > 0 Then
            SortListView(LV_MONITEURS, m_SortingColumn, m_SortingIndex)
        End If
        ' restaurer la position du curseur avant le init
        setIndice(ix, LV_MONITEURS)

    End Sub

    Private Sub LV_MONITEURS_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles LV_MONITEURS.ColumnClick
        SortListView(LV_AFFECTATIONS, m_SortingColumn, e.Column)
        m_SortingIndex = e.Column
    End Sub

    Private Sub LV_MONITEURS_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LV_MONITEURS.DoubleClick
        If LV_MONITEURS.SelectedItems.Count > 0 Then
            MoniteurtoScreen(LV_MONITEURS.SelectedItems(0).Text)
            ' afficher les détails de la formule
            TC_Details.Visible = True
            ' mémoriser ancien identifiant pour maj
            OLD_CODE = TE_CODE.Text
            TE_CODE.Focus()

            ' afficher les affectations du moniteur
            InitListeAffectations(0)
            ' afficher les élèves du moniteur
            InitListeEleves()
        End If
    End Sub

    Private Sub LV_MONITEURS_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LV_MONITEURS.KeyDown
        Select Case e.KeyCode
            ' touche Enter = DoubleClick
            Case Keys.Enter
                LV_MONITEURS_DoubleClick(sender, e)

            Case Keys.Insert

            Case Keys.Delete

        End Select

    End Sub

    Private Sub InitListeAffectations(ByVal ix As Integer)
        Dim nb As Integer = 0

        ' effacer la listview
        LV_AFFECTATIONS.Items.Clear()

        ' Lire la table AFFECTATIONS MONITEURS
        szSQL = "CALL spGet_MONITEURS_AFF_byMONITEUR('" & TE_CODE.Text & "')"
        GetRecordset(ctDSN_AEM, szSQL, rs)

        ' Load the data.
        Do While Not rs.EOF
            LV_AFFECTATIONS.Items.Add(rs.Fields("agence").Value)
            LV_AFFECTATIONS.Items(nb).SubItems.Add(rs.Fields("dated").Value)
            LV_AFFECTATIONS.Items(nb).SubItems.Add(rs.Fields("datef").Value)
            LV_AFFECTATIONS.Items(nb).SubItems.Add(rs.Fields("dmatin").Value & "h à " & _
                                                   rs.Fields("fmatin").Value & "h")
            LV_AFFECTATIONS.Items(nb).SubItems.Add(rs.Fields("dsoir").Value & "h à " & _
                                                   rs.Fields("fsoir").Value & "h")
            LV_AFFECTATIONS.Items(nb).SubItems.Add(rs.Fields("no_ligne").Value)
            Dim debut As Date = rs.Fields("dated").Value
            Dim fin As Date = rs.Fields("datef").Value
            ' affectation obsolète ?
            If debut > Now Or fin < Now Then
                LV_AFFECTATIONS.Items(nb).ForeColor = Color.Gray
            End If
            rs.MoveNext()
            nb = nb + 1
        Loop
        ' Close the recordset AND connection.
        rs.Close()
        ' restaurer la position du curseur avant le init
        setIndice(ix, LV_AFFECTATIONS)

    End Sub

    Private Sub InitListeEleves()

        Dim nb As Integer = 0

        ' effacer la listview
        LV_ELEVES.Items.Clear()

        ' Lire les ELEVES du moniteur
        szSQL = "SELECT cd_cli, nompren, permis_demande, formule FROM ELEVES WHERE cd_mon='" & TE_CODE.Text & "' AND statut='A' AND agence > 0"
        GetRecordset(ctDSN_AEM, szSQL, rs)

        Do While Not rs.EOF
            LV_ELEVES.Items.Add(rs.Fields("cd_cli").Value)
            LV_ELEVES.Items(nb).SubItems.Add(rs.Fields("nompren").Value)
            LV_ELEVES.Items(nb).SubItems.Add(nv(rs.Fields("permis_demande").Value))
            LV_ELEVES.Items(nb).SubItems.Add(nv(rs.Fields("formule").Value))
            rs.MoveNext()
            nb = nb + 1
        Loop
        ' Close the recordset AND connection.
        rs.Close()
        'positionner le curseur sur la première ligne
        setIndice(0, LV_ELEVES)

    End Sub

    Private Sub MoniteurtoScreen(ByVal ref As String)

        ' Lire l'enreg sélectionné
        szSQL = "CALL spGet_MONITEURS('" & ref & "')"
        GetRecordset(ctDSN_AEM, szSQL, rs)
        If rs.RecordCount > 0 Then
            TE_CODE.Text = rs.Fields("cd_mon").Value
            TE_NOM.Text = rs.Fields("nom").Value
            CB_PLANNING.SelectedIndex = CB_PLANNING.FindString(rs.Fields("planning").Value)
            TE_MODIFIE_LE.Text = setModifiedBy(rs.Fields("cree_le").Value, rs.Fields("modif_le").Value, rs.Fields("cd_uti").Value)
        End If
        rs.Close()

    End Sub

    Private Sub LV_AFFECTATIONS_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LV_AFFECTATIONS.DoubleClick

        If LV_AFFECTATIONS.SelectedItems.Count > 0 Then
            ' afficher les détails de l'affectation
            frmMoniteursMAJ.pNo_ligne = LV_AFFECTATIONS.SelectedItems(0).SubItems(5).Text
            frmMoniteursMAJ.ShowDialog()

            ' afficher les affectations du moniteur
            InitListeAffectations(LV_AFFECTATIONS.SelectedItems(0).Index)
        End If

    End Sub

    Private Sub LV_AFFECTATIONS_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LV_AFFECTATIONS.KeyDown

        Select Case e.KeyCode
            ' touche Enter = DoubleClick
            Case Keys.Enter
                LV_AFFECTATIONS_DoubleClick(sender, e)

            Case Keys.Insert
                BO_ADD_LIGNE_Click(sender, e)
        End Select

    End Sub

    Private Sub BO_ANNULER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BO_ANNULER.Click
        ' Cacher les détails
        TC_Details.Visible = False
        ' réaffiche la viewlist
        InitListeMoniteurs(LV_MONITEURS.SelectedItems(0).Index)
    End Sub

    Private Sub BO_Enregistrer_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BO_ENREGISTRER.Click

        If TE_CODE.Text = "000" Then
            MsgBox("Vous devrez changer le code moniteur '000' (code provisoire) !")
            Exit Sub
        End If
        ' mise à jour 
        szSQL = "CALL spUpd_MONITEURS('" & OLD_CODE & "','" & TE_CODE.Text & "','" & nq(TE_NOM.Text) & "','" & CB_PLANNING.SelectedItem & "')"
        ExecQuery(ctDSN_AEM, szSQL)
        ' Cacher les détails
        BO_ANNULER_Click(sender, e)

    End Sub

    Private Sub BO_DELETE_LIGNE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BO_DELETE_LIGNE.Click
        ' utilisateur autorisé à modifier ?
        If IsUserAuthorised(9) = False Then
            Exit Sub
        End If
        deleteEnregistrement("moniteurs", LV_MONITEURS.SelectedItems(0).SubItems(1).Text, LV_MONITEURS.SelectedItems(0).Text)
        ' Cacher les détails
        BO_ANNULER_Click(sender, e)
    End Sub

    Private Sub BO_ADD_LIGNE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BO_ADD_LIGNE.Click
        ' utilisateur autorisé à modifier ?
        If IsUserAuthorised(9) = False Then
            Exit Sub
        End If
        ' Ajouter un nouveau moniteur
        szSQL = "CALL spINS_MONITEURS('000')"
        If ExecQuery(ctDSN_AEM, szSQL) Then
            ' réaffiche la viewlist
            InitListeMoniteurs(0)
            ' ouvrir le fomulaire de modif
            LV_MONITEURS_DoubleClick(sender, e)
        End If
    End Sub

     Private Sub BO_ADD_AFF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BO_ADD_AFF.Click
        ' utilisateur autorisé à créer ?
        If IsUserAuthorised(9) = False Then
            Exit Sub
        End If
        ' Ajouter une nouvelle affectation pour aujoud'hui et une durée d'une année
        szSQL = "spINS_MONITEURS_AFF('" & TE_CODE.Text & "','" & nq(TE_NOM.Text) & "',1,'" & Format(Now, "yyyy/MM/dd") & "','" & Format(DateAdd(DateInterval.Year, 1, Now), "yyyy/MM/dd") & "')"
        GetRecordset(ctDSN_AEM, szSQL, rs)
        If rs.RecordCount > 0 Then
            ' afficher les détails de l'affectation
            frmMoniteursMAJ.pNo_ligne = rs.Fields("last_id").Value
            frmMoniteursMAJ.ShowDialog()
            ' afficher les affectations du moniteur
            InitListeAffectations(0)
        End If
    End Sub

End Class